home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 2 / CD ACTUAL VOL 2.iso / programa / tunplus / tun / tunker.mst < prev    next >
Encoding:
Text File  |  1995-09-15  |  23.8 KB  |  914 lines

  1. '**************************************************************************
  2. '*                   Tun KERNEL Setup installation script
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. GLOBAL ASKCUSTOM$
  11. GLOBAL FINDINSTTYPE$
  12. GLOBAL ENCRYPTDLG$ 
  13. GLOBAL COPYFILES$ 
  14. GLOBAL ENCRYPTFILES$ 
  15. GLOBAL CREATEINIFILES$ 
  16. GLOBAL ADDPATH$
  17. GLOBAL ASKTCPCONF$
  18. GLOBAL RUNTCPCONF$
  19. GLOBAL CREATEGROUPS$ 
  20. GLOBAL szSN$
  21. GLOBAL szAK$
  22. GLOBAL szLS$
  23. GLOBAL DEST$
  24.  
  25. '$INCLUDE 'setup.inc'
  26.  
  27. ''Dialog ID's
  28. CONST ASKQUIT      = 200
  29. CONST DESTPATH     = 300
  30. CONST EXITFAILURE  = 400
  31. CONST EXITQUIT     = 600
  32. CONST EXITSUCCESS  = 700
  33. CONST OPTIONS      = 800
  34. CONST APPHELP      = 900
  35. CONST DIREXIST     = 1000
  36. CONST CUSTINST     = 6200
  37. CONST TOOBIG       = 6300
  38. CONST BADPATH      = 6400
  39. CONST CDGETNAMEORG = 7500
  40. CONST CDBADORG     = 7800
  41. CONST MODELESS     = 5000
  42. CONST MODELESS2    = 5001
  43. CONST ASKUPDATE    = 5003
  44. CONST ASKYESNOBACK = 5004
  45. CONST ASKYESNO     = 5005
  46. CONST CDBADFILE    = 7200
  47. CONST GETSERIALNUM = 1100
  48. CONST WINPATH      = 1300
  49.  
  50. ''Bitmap ID
  51. CONST LOGO         = 1
  52.  
  53. ''File Types
  54. CONST APPFILES     = 1
  55. CONST OPTFILES1    = 2
  56. CONST CRYPTFILES   = 100
  57. CONST CRYPTCTL3D   = 101
  58.  
  59. ''Standard dialog button IDs 
  60. CONST IDOK         = 1
  61. CONST IDCANCEL     = 2
  62. CONST IDABORT      = 3
  63. CONST IDRETRY      = 4
  64. CONST IDIGNORE     = 5
  65. CONST IDYES        = 6
  66. CONST IDNO         = 7
  67.  
  68. GLOBAL DESTKER$   ''Default destination sub-directory.
  69. GLOBAL DESTCOM$   ''Default destination sub-directory.
  70. GLOBAL SETUPPROG$   ''Full Path of DLL to be load.
  71. GLOBAL FILEPATH$    ''Temp File Path.
  72. GLOBAL WINDRIVE$    ''Windows drive letter.
  73. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  74.  
  75. ''CustInst list symbol names
  76. GLOBAL APPNEEDS$    ''Option list costs per drive
  77. GLOBAL OPT1NEEDS$
  78. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  79. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  80.  
  81. ''Dialog list symbol names
  82. GLOBAL CHECKSTATES$
  83. GLOBAL STATUSTEXT$
  84. GLOBAL DRIVETEXT$
  85. ''
  86.  
  87. GLOBAL DiskFileVersion$ 
  88. GLOBAL MasterFileVersion$ 
  89. GLOBAL TCPCONF$ 
  90. GLOBAL INSTALLEDKER%
  91. GLOBAL INSTALLKER%
  92. GLOBAL INSTALLCRYPT%
  93. GLOBAL INSTALLCTL3D%
  94. GLOBAL FINDTUNPATH%
  95.  
  96.  
  97. DECLARE SUB RegisterCtl3d LIB "tunker.dll"
  98. DECLARE SUB UnregisterCtl3d LIB "tunker.dll"
  99. DECLARE SUB ShowMaximize LIB "tuncomm.dll" (frame%)
  100. DECLARE FUNCTION CustomSetup LIB "tuncomm.dll" (frame%,szDir$)
  101. DECLARE FUNCTION AddTunDir LIB "tuncomm.dll" (szDir$) AS INTEGER
  102. DECLARE FUNCTION FindExistingPath LIB "tuncomm.dll" (szDir$) AS INTEGER
  103. DECLARE FUNCTION EncryptFile LIB "tuncomm.dll" (szPath$, szSer$, szKey$, szLi$) AS INTEGER
  104. DECLARE FUNCTION AddLangMenu LIB "tuncomm.dll" (szPath$) AS INTEGER
  105. DECLARE FUNCTION CreatIniKer LIB "tuncomm.dll" (Path$,InstTcp%) AS INTEGER
  106. DECLARE FUNCTION MyExitWindows LIB "tuncomm.dll" (nType%) AS INTEGER
  107.      
  108. DECLARE FUNCTION IsInstalled (szSection$,szKey$,szFile$,szPath$) AS INTEGER
  109. DECLARE SUB AddOptFilesToCopyList (ftype%)
  110. DECLARE SUB RecalcOptFiles (ftype%)
  111. DECLARE SUB RecalcPath
  112. DECLARE SUB SetDriveStatus
  113. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  114. DECLARE FUNCTION MakeString (i%) AS STRING
  115. DECLARE FUNCTION IsNewer (szVersion1$, szVersion2$) AS INTEGER
  116.  
  117.  
  118.  
  119. INIT:
  120.     CUIDLL$ = "tunker.dll"            ''custom user interface dll
  121.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  122.  
  123. ''
  124. ''      Setup control screen:
  125. ''        Maximize Window, Add bitmap to CUIDLL, Set Window Title 
  126. ''
  127.     WndFrame% = HwndFrame()
  128.     ShowMaximize WndFrame%
  129.     SetBitmap CUIDLL$, LOGO
  130.     SetTitle "Tun KERNEL - Setup"
  131.  
  132. ''
  133. ''      Read INF file
  134. ''
  135.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  136.     IF szInf$ = "" THEN
  137.     szInf$ = GetSymbolValue("STF_CWDDIR") + "TUNKER.INF"
  138.     END IF
  139.     ReadInfFile szInf$
  140.  
  141. ''
  142. ''  Init Variables
  143. ''
  144.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  145.     IF DEST$ = "" THEN
  146.        DEST$ = WINDRIVE$ + ":\TUN"
  147.     ENDIF
  148.  
  149.     ''CustInst list symbols
  150.     CHECKSTATES$ = "CheckItemsState"
  151.     STATUSTEXT$  = "StatusItemsText"
  152.     DRIVETEXT$   = "DriveStatusText"
  153.     FOR i% = 1 TO 3 STEP 1
  154.     AddListItem CHECKSTATES$, "OFF"
  155.     NEXT i%
  156.     FOR i% = 1 TO 3 STEP 1
  157.     AddListItem STATUSTEXT$, ""
  158.     NEXT i%
  159.     FOR i% = 1 TO 7 STEP 1
  160.     AddListItem DRIVETEXT$, ""
  161.     NEXT i%
  162.     ReplaceListItem DRIVETEXT$, 7, DEST$
  163.  
  164.     ''Disk cost list symbols
  165.     APPNEEDS$   = "AppNeeds"
  166.     OPT1NEEDS$  = "Opt1Needs"
  167.     EXTRACOSTS$ = "ExtraCosts"
  168.     BIGLIST$    = "BigList"
  169.     FOR i% = 1 TO 5 STEP 1
  170.     AddListItem BIGLIST$, ""
  171.     NEXT i%
  172.     FOR i% = 1 TO 26 STEP 1
  173.     AddListItem EXTRACOSTS$, "0"
  174.         AddListItem OPT1NEEDS$, "0"
  175.     NEXT i%
  176.  
  177.     ''File Option Variables
  178.     OPT1OPT$ = "1"
  179.  
  180.     RecalcPath
  181.     SetDriveStatus
  182.  
  183. '$IFDEF DEBUG
  184.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  185. '$ENDIF ''DEBUG
  186.  
  187.     RegisterCtl3d
  188.  
  189. IF ASKCUSTOM$ <> "NO" THEN
  190. CUSTINST:
  191.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  192.  
  193.     IF sz$ = "CONTINUE" THEN
  194.     ''Install only if it will fit.
  195.     FOR i% = 1 TO 5 STEP 1
  196.         IF GetListItem(BIGLIST$, i%) <> "" THEN
  197.         GOSUB TOOBIG
  198.         GOTO CUSTINST
  199.         END IF
  200.     NEXT i%
  201.     UIPop 1
  202.     GOTO INSTALL
  203.     ELSEIF sz$ = "PATH" THEN
  204.     GOTO GETPATH
  205.     ELSEIF sz$ = "REACTIVATE" THEN
  206.     RecalcPath
  207.     SetDriveStatus
  208.     GOTO CUSTINST
  209.     ELSE
  210.     GOSUB ASKQUIT
  211.     GOTO CUSTINST
  212.     END IF
  213. ENDIF
  214.  
  215. INSTALL:
  216.  
  217. ''
  218. ''    Init path sub-directory
  219. ''
  220.  
  221.     DESTKER$= MakePath( DEST$, "KERNELW")
  222.     DESTCOM$= MakePath( DEST$, "COMMON")
  223.  
  224. ''
  225. ''    Find type of installation
  226. ''
  227. INSTALLEDKER% = 0 
  228. INSTALLKER% = 1
  229. INSTALLCRYPT% = 1
  230. INSTALLCTL3D% = 1
  231. IF FINDINSTTYPE$ <> "NO" THEN
  232.  
  233.     FILEPATH$= MakePath( DESTKER$, "TUNTCPIP.DLL")
  234.     IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  235.       MasterFileVersion$ = GetSectionKeyVersion("KernelFiles","TUNTCPIP.DLL")
  236.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  237.       INSTALLEDKER% = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  238.     ENDIF
  239.  
  240.     IF INSTALLEDKER% = 1 THEN
  241. INSK1:
  242.       SetSymbolValue "TitleYesNoBack", "Update"
  243.       SetSymbolValue "MessageYesNoBack", "The same version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  244.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  245.       UIPop 1
  246.       IF sz$ = "YES" THEN
  247.         INSTALLKER% = 1 
  248.       ELSEIF sz$ = "BACK" THEN
  249.         GOTO CUSTINST 
  250.       ELSEIF sz$ = "REACTIVATE" THEN
  251.         GOTO INSK1
  252.       ELSE
  253.         INSTALLKER% = 0
  254.         GOTO CUSTINST 
  255.       ENDIF
  256.     ELSEIF INSTALLEDKER% = 2 THEN
  257. INSK2:
  258.       SetSymbolValue "TitleYesNoBack", "Update"
  259.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  260.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  261.       UIPop 1
  262.       IF sz$ = "YES" THEN
  263.         INSTALLKER% = 2 
  264.       ELSEIF sz$ = "BACK" THEN
  265.         GOTO CUSTINST 
  266.       ELSEIF sz$ = "REACTIVATE" THEN
  267.         GOTO INSK2
  268.       ELSE
  269.         INSTALLKER% = 0
  270.         GOTO CUSTINST 
  271.       ENDIF
  272.     ELSE
  273.       INSTALLKER% = 1
  274.     ENDIF
  275.  
  276. '' Tuncrypt ?
  277.   fInst% = IsInstalled ("CryptFiles","TUNCRYPT.DLL","TUNCRYPT.DLL",DESTCOM$)
  278.   IF fInst% <> 2 AND fInst% <> 4 THEN 
  279.      INSTALLCRYPT%=0
  280.   ENDIF
  281.  
  282. '' CTL3D ?
  283.   fInst% = IsInstalled ("Ctl3dFiles","CTL3D.TUN","CTL3D.DLL",GetWindowsSysDir)
  284.   IF fInst% = 0 OR fInst% = 1 THEN 
  285.      INSTALLCTL3D%=0
  286.   ELSEIF fInst% = 2 THEN
  287.      INSTALLCTL3D%=2
  288.   ENDIF
  289.  
  290. ENDIF
  291.  
  292.  
  293. ''
  294. ''    Serialization Dialogue Box
  295. ''
  296. IF ENCRYPTDLG$ <> "NO" THEN
  297. SERIAL:
  298.     sz$ = UIStartDlg(CUIDLL$, GETSERIALNUM, "FNameOrgDlgProc", APPHELP, HELPPROC$)
  299.     IF sz$ = "CANCEL" THEN
  300.           sz$ = UIStartDlg(CUIDLL$, CDBADORG, "FInfoDlgProc", 0, "" )
  301.           UIPop 1
  302.           GOTO SERIAL
  303.     ELSEIF sz$ = "EXIT" THEN
  304.           GOSUB ASKQUIT
  305.           GOTO SERIAL
  306.     ELSEIF sz$ <> "CONTINUE" THEN
  307.           GOTO SERIAL
  308.     ENDIF
  309.        
  310.     szSN$ = GetSymbolValue( "NameOut" )
  311.     szAK$ = GetSymbolValue( "OrgOut" )
  312.     szLS$ = GetSymBolValue( "LicenseStringOut" )
  313.     szHEAD$ = MID$( szSN$, 4, 2 )
  314.     IF szHEAD$ <> "02" AND szHEAD$ <> "05" THEN
  315. BADF1:
  316.       sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "" )
  317.       UIPop 1
  318.       IF sz$ = "EXIT" THEN
  319.           GOTO ASKQUIT
  320.           GOTO SERIAL
  321.           ELSEIF sz$ = "CONTINUE" THEN
  322.           GOTO SERIAL
  323.           ELSE
  324.               GOTO BADF1
  325.       ENDIF
  326.     ENDIF
  327.     UIPop 1
  328. ENDIF
  329.  
  330.  
  331. ''
  332. ''      Copy procedure
  333. ''
  334. IF COPYFILES$ <> "NO" THEN
  335.     ClearCopyList
  336.     AddOptFilesToCopyList APPFILES
  337.     IF INSTALLKER% = 1 THEN
  338.       AddOptFilesToCopyList OPTFILES1
  339.     ENDIF
  340.     IF INSTALLCRYPT% = 1 THEN
  341.       AddOptFilesToCopyList CRYPTFILES
  342.     ENDIF
  343.     IF INSTALLCTL3D% <> 0 THEN
  344.       AddOptFilesToCopyList CTL3DFILES
  345.     ENDIF
  346.     CreateDir DEST$, cmoNone
  347.     SetRestartDir MakePath( DEST$, "TMP")
  348.     CopyFilesInCopyList
  349.  
  350. ENDIF
  351.  
  352. ''
  353. ''      Encrypt procedure
  354. ''
  355. IF ENCRYPTFILES$ <> "NO" THEN
  356.  
  357. ''    SetSymbolValue "NameOut", szSN$
  358. ''    SetSymbolValue "OrgOut", szAK$
  359. ''    SetSymBolValue "LicenseStringOut", szLS$
  360. ''    SetSymbolValue "PathFiles", DESTKER$
  361. ''    sz$ = UIStartDlg(CUIDLL$, MODELESS, "FModelessDlgProc", 0, "" )
  362. ''    UIPop 1
  363.  
  364.       fEncryt%=EncryptFile(DESTCOM$, szSN$, szAK$, szLS$)
  365.  
  366. ENDIF
  367.  
  368. ''
  369. ''       Installation of CTL3D.DLL if required
  370. ''
  371. CTL3D:
  372.    szNF$ = MakePath(DESTCOM$ , "CTL3D.TUN")
  373.    szOF$ = GetWindowsSysDir() + "CTL3D.DLL"
  374.    IF INSTALLCTL3D% = 2 THEN 
  375. CTL3D1:
  376.      sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  377.      IF sz$ = "YES" THEN
  378.        CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  379.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  380.      ELSEIF sz$ = "REACTIVATE" THEN
  381.         GOTO CTL3D1
  382.      ENDIF
  383.      UIPop 1
  384.    ELSEIF INSTALLCTL3D% = 1 THEN
  385.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  386.    ENDIF
  387.  
  388. ''
  389. ''      Modification/Creation of TUN KERNEL entry in TUN.INI
  390. ''
  391. IF CREATEINIFILES$ <> "NO" THEN
  392.  
  393.     szLG$ = MID$( szSN$, 3, 1 )
  394.     nLG% = (ASC(MID$(szSN$,6,1)) - ASC("0")) * 10 + (ASC(MID$(szSN$,7,1)) - ASC("0"))
  395.     IF DoesIniKeyExist( MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language") = 0 THEN
  396.     IF nLG% = 1 THEN
  397.         szLGN$= "01"
  398.     ELSEIF nLG% > 3 THEN
  399.         szLGN$ = MakeString(nLG% - 2 ) 
  400.     ELSE
  401.         szLGN$ ="00"
  402.     END IF
  403.         CreateIniKeyValue MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language", szLGN$ ,cmoOverwrite
  404.     END IF
  405.  
  406. IF INSTALLCRYPT% = 1 THEN
  407.   i%=AddLangMenu(DESTCOM$)
  408. ENDIF
  409.  
  410.  i%= CreatIniKer(DESTKER$,0)
  411.  
  412. ENDIF
  413.  
  414. ''
  415. ''      Add Path of Tun KERNEL in AUTOEXEC.BAT
  416. ''
  417. FINDTUNPATH%=1
  418. IF ADDPATH$ <> "NO" THEN
  419.  
  420. IF INSTALLKER% <> 0 THEN
  421.   FINDTUNPATH% = FindExistingPath(DESTKER$)
  422.   IF FINDTUNPATH% = 0 THEN
  423.     i% = AddTunDir(DESTKER$)
  424.   ENDIF
  425. ENDIF
  426. ENDIF
  427.  
  428. ''
  429. ''     Ask to configure TCP/IP 
  430. ''
  431. TCPCONF$ = "YES"
  432.  
  433. IF ASKTCPCONF$ <> "NO" THEN
  434. TCPCONF1:    
  435.     SetSymbolValue "MessageYesNo", "Do you want to configure TCP/IP now ? This can be done later running the Administrator"
  436.     SetSymbolValue "TitleYesNo", "TCP/IP Configuration"
  437.     TCPCONF$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "" )
  438.     IF TCPCONF$ = "REACTIVATE" THEN
  439.         GOTO TCPCONF1
  440.     ENDIF
  441.     UIPop 1
  442.  
  443. ENDIF
  444.  
  445. ''
  446. ''      TUN KERNEL ProgramGroup and ProgramItem creation  
  447. ''
  448.  
  449. IF CREATEGROUPS$ <> "NO" THEN
  450.  
  451.     CreateProgmanGroup "Tun KERNEL", "", cmoNone
  452.     ShowProgmanGroup  "Tun KERNEL", 1, cmoNone
  453.     CreateProgmanItem "Tun KERNEL", "Admin", MakePath( DESTKER$, "WTUNTCPW.EXE -NFS -NFSD -LPR -LPD -FTPD" ), "", cmoOverwrite
  454.     CreateProgmanItem "Tun KERNEL", "WTCPIP", MakePath( DESTKER$, "WTCPIP.EXE" ), "", cmoOverwrite
  455.     CreateProgmanItem "Tun KERNEL", "Ping", MakePath( DESTKER$, "WPING.EXE" ), "", cmoOverwrite
  456.  
  457. ENDIF
  458.  
  459. ''
  460. ''      Run TCP/IP Custom Dialogs
  461. ''
  462. IF RUNTCPCONF$ <> "NO" THEN
  463.  
  464.   IF TCPCONF$= "YES" THEN
  465.     SETUPPROG$= MakePath( DESTKER$, "WTCPDLG.DLL")
  466.     i% = CustomSetup( WndFrame%, SETUPPROG$)
  467.   ENDIF
  468.  
  469. ENDIF
  470.  
  471. QUIT:
  472.     ON ERROR GOTO ERRQUIT
  473.  
  474.     IF ERR = 0 THEN
  475.     dlg% = EXITSUCCESS
  476.         IF COPYFILES$ <> "NO" THEN
  477.           IF RestartListEmpty() = 0 THEN
  478.         dumb% = ExitExecRestart()
  479.       END IF
  480.         ENDIF
  481.         IF FINDTUNPATH% = 0 THEN
  482. REBOOT1:
  483.           SetSymbolValue "TitleYesNo", "Restart System"
  484.           SetSymbolValue "MessageYesNo", "Setup has modified AUTOEXEC.BAT file. Do you want to restart the computer ?" 
  485.           sz$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "")
  486.           UIPop 1
  487.           IF sz$ <> "NO" THEN
  488.             i%=MyExitWindows(1)
  489.             GOTO REBOOT1
  490.           ENDIF
  491.         ENDIF
  492.     ELSEIF ERR = STFQUIT THEN
  493.     dlg% = EXITQUIT
  494.     ELSE
  495.     dlg% = EXITFAILURE
  496.     END IF
  497. QUITL1:
  498.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  499.     IF sz$ = "REACTIVATE" THEN
  500.     GOTO QUITL1
  501.     END IF
  502.     UnregisterCtl3d
  503.     UIPop 1
  504.  
  505.     END
  506.  
  507. ERRQUIT:
  508.     i% = DoMsgBox("Les sources de Setup ne sont plus valide, appelez le support technique!", "Message Setup", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  509.     END
  510.  
  511.  
  512.  
  513. GETPATH:
  514.     SetSymbolValue "EditTextIn", DEST$
  515.     SetSymbolValue "EditFocus", "END"
  516. GETPATHL1:
  517.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  518.  
  519.     IF sz$ = "CONTINUE" THEN
  520.     olddest$ = DEST$
  521.     DEST$ = GetSymbolValue("EditTextOut")
  522.  
  523.     ''Validate new path.
  524.     IF IsDirWritable(DEST$) = 0 THEN
  525.         GOSUB BADPATH
  526.         GOTO GETPATHL1
  527.     END IF
  528.     UIPop 1
  529.  
  530.     ''Truncate display if too long.
  531.     IF LEN(DEST$) > 23 THEN
  532.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  533.     ELSE
  534.         ReplaceListItem DRIVETEXT$, 7, DEST$
  535.     END IF
  536.  
  537.     ''Recalc if path changed.
  538.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  539.         RecalcPath
  540.         SetDriveStatus
  541.     END IF
  542.  
  543.     olddest$ = ""
  544.     GOTO CUSTINST
  545.     ELSEIF sz$ = "REACTIVATE" THEN
  546.     RecalcPath
  547.     SetDriveStatus
  548.     GOTO GETPATHL1
  549.     ELSEIF sz$ = "EXIT" THEN
  550.     GOSUB ASKQUIT
  551.     GOTO GETPATHL1
  552.     ELSE
  553.     UIPop 1
  554.     GOTO CUSTINST
  555.     END IF
  556.  
  557.  
  558. GETPATHWIN:
  559.     SetSymbolValue "EditTextIn", WINSOCKPATH$
  560.     SetSymbolValue "EditFocus", "END"
  561. GETPATHL1WIN:
  562.     sz$ = UIStartDlg(CUIDLL$, WINPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  563.  
  564.     IF sz$ = "CONTINUE" THEN
  565.     oldwinsockpath$ = WINSOCKPATH$
  566.     WINSOCKPATH$ = GetSymbolValue("EditTextOut")
  567.  
  568.     ''Validate new path.
  569.     IF IsDirWritable(WINSOCKPATH$) = 0 THEN
  570.         GOSUB BADPATH
  571.         GOTO GETPATHL1WIN
  572.     END IF
  573.     UIPop 1
  574.  
  575.     ''Truncate display if too long.
  576.     IF LEN(WINSOCKPATH$) > 23 THEN
  577.         ReplaceListItem DRIVETEXT$, 4, MID$(WINSOCKPATH$, 1, 23)+"..."
  578.     ELSE
  579.         ReplaceListItem DRIVETEXT$, 4, WINSOCKPATH$
  580.     END IF
  581.  
  582.     oldwinsockpath$ = ""
  583.     GOTO CUSTINST
  584.     ELSEIF sz$ = "REACTIVATE" THEN
  585.     GOTO GETPATHL1WIN
  586.     ELSEIF sz$ = "EXIT" THEN
  587.     GOSUB ASKQUIT
  588.     GOTO GETPATHL1WIN
  589.     ELSE
  590.     UIPop 1
  591.     GOTO CUSTINST
  592.     END IF
  593.  
  594. ''OPTFILES1:
  595. ''    SetSymbolValue "RadioDefault", OPT1OPT$
  596. ''OPT1L1:
  597. ''    sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
  598. ''    newopt$ = GetSymbolValue("ButtonChecked")
  599. ''
  600. ''    IF sz$ = "CONTINUE" THEN
  601. ''        UIPop 1
  602. ''        IF newopt$ <> OPT1OPT$ THEN
  603. ''            OPT1OPT$ = newopt$
  604. ''            RecalcOptFiles OPTFILES1
  605. ''            SetDriveStatus
  606. ''        END IF
  607. ''        newopt$ = ""
  608. ''        GOTO CUSTINST
  609. ''    ELSEIF sz$ = "REACTIVATE" THEN
  610. ''        RecalcPath
  611. ''        SetDriveStatus
  612. ''        GOTO OPT1L1
  613. ''    ELSEIF sz$ = "EXIT" THEN
  614. ''        GOSUB ASKQUIT
  615. ''        GOTO OPT1L1
  616. ''    ELSE
  617. ''        UIPop 1
  618. ''        newopt$ = ""
  619. ''        GOTO CUSTINST
  620. ''    END IF
  621.  
  622.  
  623.  
  624. ''OPTFILES2:
  625. ''    SetSymbolValue "RadioDefault", OPT2OPT$
  626. ''OPT2L1:
  627. ''    sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
  628. ''    newopt$ = GetSymbolValue("ButtonChecked")
  629. ''
  630. ''    IF sz$ = "CONTINUE" THEN
  631. ''        UIPop 1
  632. ''        IF newopt$ <> OPT2OPT$ THEN
  633. ''            OPT2OPT$ = newopt$
  634. ''            RecalcOptFiles OPTFILES2
  635. ''            SetDriveStatus
  636. ''        END IF
  637. ''        newopt$ = ""
  638. ''        GOTO CUSTINST
  639. ''    ELSEIF sz$ = "REACTIVATE" THEN
  640. ''        RecalcPath
  641. ''        SetDriveStatus
  642. ''        GOTO OPT2L1
  643. ''    ELSEIF sz$ = "EXIT" THEN
  644. ''        GOSUB ASKQUIT
  645. ''        GOTO OPT2L1
  646. ''    ELSE
  647. ''        UIPop 1
  648. ''        newopt$ = ""
  649. ''        GOTO CUSTINST
  650. ''    END IF
  651.  
  652. ASKUPDATE:
  653.      sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  654.     IF sz$ = "YES" THEN
  655.        CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  656.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  657.     ENDIF
  658.         
  659.      UIPop 1
  660.      RETURN
  661.  
  662. TOOBIG:
  663.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  664.     IF sz$ = "REACTIVATE" THEN
  665.     RecalcPath
  666.     SetDriveStatus
  667.     GOTO TOOBIG
  668.     END IF
  669.     UIPop 1
  670.     RETURN
  671.  
  672.  
  673.  
  674. BADPATH:
  675.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  676.     IF sz$ = "REACTIVATE" THEN
  677.     RecalcPath
  678.     SetDriveStatus
  679.     GOTO BADPATH
  680.     END IF
  681.     UIPop 1
  682.     RETURN
  683.  
  684.  
  685. ASKQUIT:
  686.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  687.  
  688.     IF sz$ = "EXIT" THEN
  689.     UIPopAll
  690.     ERROR STFQUIT
  691.     ELSEIF sz$ = "REACTIVATE" THEN
  692.     GOTO ASKQUIT
  693.     ELSE
  694.     UIPop 1
  695.     END IF
  696.     RETURN
  697.  
  698.  
  699.  
  700. '**
  701. '** Purpose:
  702. '**     Adds the specified option files to the copy list.
  703. '** Arguments:
  704. '**     ftype%  - type of files to add, one of the following:
  705. '**             APPFILES, OPTFILES1, OPTFILES2
  706. '** Returns:
  707. '**     none.
  708. '*************************************************************************
  709. SUB AddOptFilesToCopyList (ftype%) STATIC
  710.  
  711.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  712.     IF ftype% = APPFILES THEN
  713.     AddSectionFilesToCopyList "KernelFiles", SrcDir$, DEST$
  714.     ELSEIF ftype% = OPTFILES1  THEN
  715.     AddSectionFilesToCopyList "KernelnFiles", SrcDir$, DEST$
  716.     ELSEIF ftype% = CRYPTFILES  THEN
  717.     AddSectionFilesToCopyList "CryptFiles", SrcDir$, DEST$
  718.     ELSEIF ftype% = CTL3DFILES  THEN
  719.     AddSectionFilesToCopyList "Ctl3dFiles", SrcDir$, DEST$
  720.     ENDIF
  721.     SrcDir$ = ""
  722.  
  723. END SUB
  724.  
  725.  
  726. '**
  727. '** Purpose:
  728. '**     Recalculates disk space for the given option files and sets
  729. '**     the status info symbol "StatusItemsText".
  730. '** Arguments:
  731. '**     ftype% - type of files to add, one of the following:
  732. '**             APPFILES, OPTFILES1, OPTFILES2
  733. '** Returns:
  734. '**     none.
  735. '*************************************************************************
  736. SUB RecalcOptFiles (ftype%) STATIC
  737.     CursorSave% = ShowWaitCursor()
  738.     ClearCopyList
  739.     AddOptFilesToCopyList ftype%
  740.  
  741.     fExtra% = 0
  742.     IF ftype% = APPFILES THEN
  743.     ListSym$ = APPNEEDS$
  744. ''        IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  745.         ''Add extra cost to Windows drive for ini/progman, etc.
  746.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  747.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  748.         fExtra% = 1
  749. ''        END IF
  750.     ELSEIF ftype% = OPTFILES1 THEN
  751.     ListSym$ = OPT1NEEDS$
  752.     END IF
  753.  
  754.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  755.  
  756.     cost& = 0
  757.     FOR i% = 1 TO 26 STEP 1
  758.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  759.     NEXT i%
  760.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  761.  
  762.     IF StillNeed& > 0 THEN
  763.     ReplaceListItem BIGLIST$, ftype%, "YES"
  764.     ELSE
  765.     ReplaceListItem BIGLIST$, ftype%, ""
  766.     END IF
  767.  
  768.     IF fExtra% THEN
  769.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  770.     END IF
  771.     RestoreCursor CursorSave%
  772.     ListSym$ = ""
  773. END SUB
  774.  
  775.  
  776. '**
  777. '** Purpose:
  778. '**     Recalculates disk space and sets option status info according
  779. '**     to the current destination path.
  780. '** Arguments:
  781. '**     none.
  782. '** Returns:
  783. '**     none.
  784. '*************************************************************************
  785. SUB RecalcPath STATIC
  786.  
  787.     CursorSave% = ShowWaitCursor()
  788.  
  789.     RecalcOptFiles APPFILES
  790.     RecalcOptFiles OPTFILES1
  791.  
  792.     RestoreCursor CursorSave%
  793. END SUB
  794.  
  795.  
  796. '**
  797. '** Purpose:
  798. '**     Sets drive status info according to latest disk space calcs.
  799. '** Arguments:
  800. '**     none.
  801. '** Returns:
  802. '**     none.
  803. '*************************************************************************
  804. SUB SetDriveStatus STATIC
  805.  
  806.     drive$ = MID$(DEST$, 1, 1)
  807.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  808.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) +VAL(GetListItem(OPT1NEEDS$, ndrive%))
  809.     free& = GetFreeSpaceForDrive(drive$)
  810.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  811.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  812.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  813.  
  814.     IF drive$ = WINDRIVE$ THEN
  815. ''    ReplaceListItem DRIVETEXT$, 4, ""
  816.     ReplaceListItem DRIVETEXT$, 5, ""
  817.     ReplaceListItem DRIVETEXT$, 6, ""
  818.     ELSE
  819.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  820.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  821.     IF cost& = 0 THEN
  822. ''        ReplaceListItem DRIVETEXT$, 4, ""
  823.         ReplaceListItem DRIVETEXT$, 5, ""
  824.         ReplaceListItem DRIVETEXT$, 6, ""
  825.     ELSE
  826.         free& = GetFreeSpaceForDrive(WINDRIVE$)
  827. ''        ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  828.         ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  829.         ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  830.     END IF
  831.     END IF
  832. END SUB
  833.  
  834.  
  835. '**
  836. '** Purpose:
  837. '**     Appends a file name to the end of a directory path,
  838. '**     inserting a backslash character as needed.
  839. '** Arguments:
  840. '**     szDir$  - full directory path (with optional ending "\")
  841. '**     szFile$ - filename to append to directory
  842. '** Returns:
  843. '**     Resulting fully qualified path name.
  844. '*************************************************************************
  845. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  846.     IF szDir$ = "" THEN
  847.     MakePath = szFile$
  848.     ELSEIF szFile$ = "" THEN
  849.     MakePath = szDir$
  850.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  851.     MakePath = szDir$ + szFile$
  852.     ELSE
  853.     MakePath = szDir$ + "\" + szFile$
  854.     END IF
  855. END FUNCTION
  856.  
  857. FUNCTION MakeString (i%) STATIC AS STRING
  858.  
  859.     Number$ = "0123456789"
  860.     MakeString = "0" + MID$(Number$,i%+1 ,1)
  861.     
  862. END FUNCTION
  863.  
  864. '**
  865. '** Purpose:
  866. '**     Newest version 
  867. '** Arguments:
  868. '**     szVersion1$ - N.N.N.N version string 1 
  869. '**     szVersion2$ - N.N.N.N version string 2 
  870. '** Returns:
  871. '**     If szVersion1$ > szVersion2$  return 0 
  872. '**     If szVersion1$ = szVersion2$  return 1 
  873. '**     If szVersion1$ < szVersion2$  return 2 
  874. '*************************************************************************
  875. FUNCTION IsNewer (szVersion1$, szVersion2$) STATIC AS INTEGER
  876.     IF GetVersionNthField(szVersion1$,1) < GetVersionNthField(szVersion2$,1) THEN
  877.     IsNewer = 2
  878.     ELSEIF GetVersionNthField(szVersion1$,1) > GetVersionNthField(szVersion2$,1) THEN
  879.     IsNewer = 0
  880.     ELSE 
  881.         IF GetVersionNthField(szVersion1$,2) < GetVersionNthField(szVersion2$,2) THEN
  882.           IsNewer = 2
  883.         ELSEIF GetVersionNthField(szVersion1$,2) > GetVersionNthField(szVersion2$,2) THEN
  884.         IsNewer = 0
  885.         ELSE
  886.           IF GetVersionNthField(szVersion1$,3) < GetVersionNthField(szVersion2$,3) THEN
  887.             IsNewer = 2
  888.           ELSEIF GetVersionNthField(szVersion1$,3) > GetVersionNthField(szVersion2$,3) THEN
  889.         IsNewer = 0
  890.           ELSE
  891.             IF GetVersionNthField(szVersion1$,4) < GetVersionNthField(szVersion2$,4) THEN
  892.               IsNewer = 2
  893.             ELSEIF GetVersionNthField(szVersion1$,4) > GetVersionNthField(szVersion2$,4) THEN
  894.           IsNewer = 0
  895.             ELSE
  896.               IsNewer = 1
  897.             END IF
  898.           END IF
  899.         END IF
  900.     END IF
  901. END FUNCTION
  902.  
  903. FUNCTION IsInstalled(szSection$,szKey$,szFile$,szPath$) STATIC AS INTEGER 
  904.  
  905.     IsInstalled = 4
  906.     FILEPATH$= MakePath( szPath$, szFile$)
  907.     IF DoesFileExist ( FILEPATH$, femExists) = 1 THEN
  908.       MasterFileVersion$ = GetSectionKeyVersion(szSection$,szKey$)
  909.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  910.       IsInstalled = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  911.     ENDIF
  912.  
  913. END FUNCTION
  914.